package org.huangrui.spark.scala.core.rdd.operate.action

import org.apache.spark.{SparkConf, SparkContext}

/**
 * @Author hr
 * @Create 2024-10-18 7:00 
 */
object Spark01_Operate_Action {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local[*]").setAppName("spark")
    val sc = new SparkContext(conf)
    val rdd = sc.parallelize(List(1, 2, 3, 4), 2)
    val mapRdd = rdd.map(x => {
      println(s"mapxxxxxxxxxxxxxxxxxxxxxxxxxx = $x")
      x * 2
    })
    // TODO collect方法就是RDD的行动算子
    //      RDD的行动算子会触发作业（Job）的执行
    mapRdd.collect().foreach(println)

    // 行动算子和转换算子如何区分？
    //     如果方法调用后，执行Job了，那么这个方法就是行动算子(X)
    //     如果方法调用后，不执行Job，那么这个方法就是转换算子(X)
    // 转换算子的目的：将旧的RDD转换成新的RDD，为了组合多个RDD的功能
    //    RDD(In) -> RDD(Out)
    //    val map = mapRdd.map(x => x)
    //    val groupRdd = mapRdd.groupBy(x => x)
    //    val filterRdd = mapRdd.filter(x => x % 2 == 0)

    //    val count:Long = mapRdd.count()
    //    val collect:Array[Int] = mapRdd.collect()
    mapRdd.collect()

    println("=================计算完毕===================")
    // http://localhost:4040
    Thread.sleep(10000000L);

    sc.stop()
  }
}
